
#pragma once

#ifndef _WINDOWS_
#define Win32_LEAN_AND_MEAN
#include <windows.h>
#undef Win32_LEAN_AND_MEAN
#endif


///////////////////////////////////////////////////////////////////////////////
// Namespace: Lumin::Win32
///////////////////////////////////////////////////////////////////////////////

namespace Lumin {
namespace Win32 {

///////////////////////////////////////////////////////////////////////////////
// CEvent
///////////////////////////////////////////////////////////////////////////////

class CEvent 
{
   public :
   
      CEvent(
         LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         bool manualReset,
         bool initialState);
   
      CEvent(
         LPSECURITY_ATTRIBUTES lpSecurityAttributes,
         bool manualReset,
         bool initialState,
         const char* name);
      
      virtual ~CEvent();

      HANDLE GetEvent() const;

      void Wait() const;

      bool Wait(
         DWORD timeoutMillis) const;

      void Reset();

      void Set();

      void Pulse();

   private :

      HANDLE m_hEvent;

      // No copies do not implement
      CEvent(const CEvent &rhs);
      CEvent &operator=(const CEvent &rhs);
};

///////////////////////////////////////////////////////////////////////////////
// Namespace: Lumin::Win32
///////////////////////////////////////////////////////////////////////////////

} // End of namespace Win32
} // End of namespace Lumin 
